home *** CD-ROM | disk | FTP | other *** search
- #!/bin/bash
- #
- # IEEE1394-specific hotplug policy agent.
- #
- # This should handle 2.4.10 (or later) IEEE1394 hotplugging, with a
- # consistent framework for adding device and driver specific treatments.
- #
- # Kernel IEEE1394 params are:
- #
- # ACTION=add or remove
- # VENDOR_ID=24 bit vendor id
- # GUID=64 bit globally unique id
- # SPEFICIER_ID=24 bit id of owner of specification
- # VERSION=version of specification
- #
- # See IEEE1212 for details on these parameters.
- #
- # HISTORY:
- # 26-Mar-2002 Small cleanups to match other .agent files. (gkh)
- # 16-Sept-2001 Initial version from Kristian Hogsberg
- # <hogsberg@users.sourceforge.net> (plus tweaks)
- #
- # $Id: ieee1394.agent,v 1.6 2002/03/30 21:06:08 dbrownell Exp $
- #
-
- cd /etc/hotplug
- . hotplug.functions
- # DEBUG=yes export DEBUG
-
- # generated by modutils 2.4.9 or later, for 2.4.10 and later kernels
- MAP_CURRENT=$MODULE_DIR/modules.ieee1394map
-
- # accumulates list of modules we may care about
- DRIVERS=
-
- if [ "$ACTION" = "" ]; then
- mesg Bad IEEE1394 agent invocation
- exit 1
- fi
-
-
- declare -i device_vendor_id device_specifier_id device_version
- device_vendor_id="0x$VENDOR_ID"
- device_specifier_id="0x$SPECIFIER_ID"
- device_version="0x$VERSION"
-
- declare -i MATCH_VENDOR_ID MATCH_SPECIFIER_ID MATCH_VERSION
- MATCH_VENDOR_ID=0x0001
- MATCH_SPECIFIER_ID=0x0004
- MATCH_VERSION=0x0008
-
- #
- # stdin is "modules.ieee1394map" syntax
- # on return, ONE matching module was added to $DRIVERS
- #
- ieee1394_map_modules ()
- {
- local module ignored
- declare -i match_flags vendor_id model_id
- declare -i specifier_id version
-
- # comment line lists (current) pci_device_id field names
- read ignored
-
- while read module match_flags vendor_id model_id specifier_id version
- do
- : check match for $module
-
- : vendor_id $vendor_id $device_vendor_id
- if [ $(($match_flags & $MATCH_VENDOR_ID)) -ne 0 -a $vendor_id -ne $device_vendor_id ]; then
- continue
- fi
-
- : specifier_id $specifier_id $device_specifier_id
- if [ $(($match_flags & $MATCH_SPECIFIER_ID)) -ne 0 -a $specifier_id -ne $device_specifier_id ]; then
- continue
- fi
-
- : version $version $device_version
- if [ $(($match_flags & $MATCH_VERSION)) -ne 0 -a $version != $device_version ]; then
- continue
- fi
-
- DRIVERS="$module $DRIVERS"
- break
- done
- }
-
- #
- # What to do with this IEEE1394 hotplug event?
- #
- case "$ACTION" in
-
- add)
- LABEL="IEEE1394 product 0x$VENDOR_ID/0x$SPECIFIER_ID/0x$VERSION"
-
- # on 2.4 systems, modutils maintains MAP_CURRENT
- if [ -r $MAP_CURRENT ]; then
- load_drivers ieee1394 $MAP_CURRENT "$LABEL"
- fi
-
- if [ "$DRIVERS" == "" ]; then
- mesg "... no drivers for $LABEL"
- exit 2
- fi
- ;;
-
- remove)
- ieee1394_map_modules < $MAP_CURRENT
- for MODULE in $DRIVERS
- do
- if [ -x $HOTPLUG_DIR/ieee1394/$MODULE ]; then
- $HOTPLUG_DIR/ieee1394/$MODULE
- fi
- done
- ;;
-
- *)
- mesg "IEEE1394 '$ACTION' event not supported"
- exit 1
- ;;
-
- esac
-